import { login, getUserInfo,getUserInfotx} from '@/api/user'
import { getToken, setToken, removeToken,setTime} from '@/utils/auth'
import { resetRouter } from '@/router'


// 状态
const state = {
  token: getToken(),
  userInfo:{}
}
// 修改状态
const mutations = {
  // 设置token
  setToken(state, token) {
    state.token = token // 设置token  只是修改state的数据
    setToken(token) // vuex和 缓存数据的同步
  },
  // 删除缓存
  removeToken(state) {
    state.token = null  //删除vuex的token
    removeToken() //先清除vuex  在清除缓存  vuex和缓存数据同步
  },

  // 设置用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 删除用户信息
  reomveUserInfo(state) {
    state.userInfo={}
  }
}
// 执行异步
const actions = {
  // 定义login action 也需要参数 调用action时 传递过来的参数
  async login(context, data) {
    const res = await login(data)
      // 表示登录接口调用成功 也就意味着你的用户名和密码是正确的
      // 现在用户有token
      // actions   修改state  必须通过mutations
      context.commit("setToken",res)
      setTime()
  },

  // 获取用户基本信息
  async getUserInfo(context) {
    const res = await getUserInfo()  //获取用户基本资料
    const restx = await getUserInfotx(res.userId)  //获取头像
    const baseRes = {...res,...restx}  //将结果合并
    context.commit("setUserInfo", baseRes)
    return baseRes
  },

  // 退出登录
  logout(context) {
    context.commit("reomveUserInfo") //删除用户信息
    context.commit("removeToken") //删除token
    // 重置路由
    resetRouter()
    context.commit('permission/setRoutes', [], { root: true })
    context.dispatch('tagsView/delAllViews',null,{root:true})
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}






